/************************************************************************
 * <br>
 * <ul>
 * <li>版权所有：唐山弘川科技有限公司 2009－2020</li>
 * <li>创建日期：2009-8-10</li>
 * <li>初始作者：刘川</li>
 * </ul>
 * <ul>
 * <b>修订历史</b>
 * <li>1、</li>
 * </ul>
 ***********************************************************************/
package com.hy.enterprise.framework.lang.proxy ;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;

/**
 * <ul>
 * <li>设计作者：刘川</li>
 * <li>设计日期：2009-8-10</li>
 * <li>设计时间：下午02:11:50</li>
 * <li>设计目的：CGLIB代理工厂实现类</li>
 * </ul>
 * <ul>
 * <b>修订历史</b>
 * <li>1、</li>
 * </ul>
 */
public class CglibProxyFactory implements IProxyFactory
{
	/**
	 * 当前工厂实例
	 */
	public static final IProxyFactory	INSTANCE	=
	                                                  new CglibProxyFactory ( ) ;

	@ SuppressWarnings ( "unchecked" )
	public < T > T createProxy (
	                             ClassLoader classLoader ,
	                             MethodInterceptor methodInterceptorHandler ,
	                             Class < T > mainType ,
	                             Class < ? > ... otherTypes )
	{

		Enhancer enhancer =
		                    new Enhancer ( ) ;
		enhancer
		        .setClassLoader ( classLoader ) ;
		enhancer
		        .setSuperclass ( mainType ) ;
		if ( ( otherTypes != null )
		     && ( otherTypes.length > 0 ) )
		{
			enhancer
			        .setInterfaces ( otherTypes ) ;
		}
		enhancer
		        .setCallback ( methodInterceptorHandler ) ;
		return ( T ) enhancer
		                     .create ( ) ;

	}
}
